﻿Imports System.Data.SqlClient
Imports Control_Vuelos_BE
Imports Control_Vuelos_ADO

Public Class Movimiento_PersonalADO
    Dim MiConexion As New ConexionADO
    Dim cnx As New SqlConnection(MiConexion.GetCnx)
    Dim cmd As New SqlCommand
    Dim vReservaADO As New V_ReservaADO
    Dim vReservaBE As New V_ReservaBE
    Dim mPasajeroADO As New PasajeroADO
    Dim mPasajeroBE As New M_PasajeroBE
    Dim DManifiestoBE As New D_ManifiestoBE
    Dim Manifiesto As New ManifiestoADO
    ' Variables 

    Public Function pr_MovimientoPersonal(ByVal p_CodUser As String) As DataTable
        Dim dts As New DataSet
        Dim ada As SqlDataAdapter
        Try
            cmd.Connection = cnx
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "pr_MovimientoPersonal"
            cmd.Parameters.Clear()
            cmd.Parameters.Add(New SqlParameter("@p_CodUser", SqlDbType.Char, 20))
            cmd.Parameters("@p_CodUser").Value = p_CodUser
            ada = New SqlDataAdapter(cmd)
            ada.Fill(dts, "MovPer")
            Return dts.Tables("MovPer")
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Function

    Public Function fn_RecuperarFlagRetorno(ByVal CodMovimiento As Integer) As Boolean
        Dim _FlgRetorno As Boolean
        Dim cn As New SqlConnection(MiConexion.GetCnx)
        Using cn
            cn.Open()
            Try
                Dim sInstruccion As String = "SELECT ISNULL(FlgRetorno,0) as FlgRetorno FROM dbo.Movimiento_Personal " & _
                    " WHERE CodMovimiento = @CodMovimiento  "
                Dim cmd2 As New SqlCommand(sInstruccion, cn)
                cmd2.Parameters.AddWithValue("@CodMovimiento", CodMovimiento)
                cmd2.CommandType = CommandType.Text
                _FlgRetorno = cmd2.ExecuteScalar()
                Return _FlgRetorno
            Catch myException As Exception
                MsgBox("Movimiento_PersonalADO (fn_RecuperarFlagRetorno) --> " & myException.Message, MsgBoxStyle.Critical)
                Return False
            End Try
        End Using
    End Function

    Public Function fn_GrabarCheckInPasajeros(ByVal p_DTManifiesto As DataTable, ByVal p_CodViaje As String) As Boolean
        Const sInstruccion As String = "Update dbo.C_Manifiesto SET EstadoManifiesto = '2' WHERE CodViaje = @CodViaje"
        Const sInstruccion2 As String = "Update dbo.V_ProgramaViaje SET EstadoViaje = '2' WHERE CodViaje = @CodViaje"
        Dim nCR As Integer = 0
        Dim oTran As SqlTransaction
        Dim dsDetalle As DataTable = p_DTManifiesto
        Try
            Dim cn As New SqlConnection(MiConexion.GetCnx)
            Using cn
                Dim cmd As New SqlCommand(sInstruccion, cn)
                Using cmd
                    cn.Open()
                    oTran = cn.BeginTransaction(Data.IsolationLevel.Serializable)
                    ' Actualizo el estado del manifiesto
                    cmd.Parameters.AddWithValue("@CodViaje", p_CodViaje)
                    cmd.Transaction = oTran
                    cmd.ExecuteNonQuery()
                    Dim cmdDet As SqlCommand
                    Dim cmdDMa As SqlCommand
                    Dim cmdVuelo As SqlCommand
                    Dim cmdUManifiesto As SqlCommand
                    Dim cmdUReserva As SqlCommand
                    Dim cmdUPMovPer As SqlCommand
                    Dim sInstDetalle As String
                    Dim sUpdDManifiesto As String
                    Dim sUpdReserva As String
                    Dim nCodPasajero As Integer = 0
                    'Actualizo el estado vuelo
                    cmdVuelo = New SqlCommand(sInstruccion2, cn)
                    cmdVuelo.Parameters.AddWithValue("@CodViaje", p_CodViaje)
                    cmdVuelo.Transaction = oTran
                    cmdVuelo.ExecuteNonQuery()
                    'Verifico los checking de
                    Dim I As Integer
                    For I = 0 To dsDetalle.Rows.Count - 1
                        If IsDBNull(dsDetalle.Rows(I).Item("TipPorExcepcion")) Then

                        Else
                            If (dsDetalle.Rows(I).Item("TipPorExcepcion") = "1") Then
                                mPasajeroBE.AppPasajero = dsDetalle.Rows(I).Item("AppPasajero")
                                mPasajeroBE.ApmPasajero = dsDetalle.Rows(I).Item("ApmPasajero")
                                mPasajeroBE.NomPasajero = dsDetalle.Rows(I).Item("NomPasajero")
                                mPasajeroBE.NroDocumentoId = dsDetalle.Rows(I).Item("NroDocumentoId")
                                mPasajeroBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                mPasajeroBE.NacionalidadPasajero = dsDetalle.Rows(I).Item("NacionalidadPasajero")
                                mPasajeroBE.TlfPasajero = dsDetalle.Rows(I).Item("TlfPasajero")
                                mPasajeroBE.RpcPasajero = dsDetalle.Rows(I).Item("RpcPasajero")
                                mPasajeroBE.MailPasajero = dsDetalle.Rows(I).Item("MailPasajero")
                                mPasajeroBE.CodLugarResidencia = dsDetalle.Rows(I).Item("CodLugarResidencia")
                                nCodPasajero = mPasajeroADO.TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                                If nCodPasajero = 0 Then
                                    mPasajeroADO.CrearPasajero(mPasajeroBE)
                                    nCodPasajero = mPasajeroADO.TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                                End If
                                vReservaBE.FchReserva = dsDetalle.Rows(I).Item("FchViaje")
                                vReservaBE.TipPasajero = dsDetalle.Rows(I).Item("TipPasajero")
                                vReservaBE.CodPasajero = nCodPasajero
                                vReservaBE.CodCentroCosto = dsDetalle.Rows(I).Item("CodCentroCosto")
                                vReservaBE.PctCentroCosto = 100
                                vReservaBE.PsoPasajero = 0
                                vReservaBE.PsoEquipajePasajero = 0
                                vReservaBE.FchViaje = dsDetalle.Rows(I).Item("FchViaje")
                                vReservaBE.FchRetorno = dsDetalle.Rows(I).Item("FchRetorno")
                                vReservaBE.MotivoViaje = "Pasajero abordo en el Aeropuerto"
                                vReservaBE.FlgRequisitos = 0
                                vReservaBE.FlgPermiso = 0
                                vReservaBE.NroBoleta = ""
                                vReservaBE.NroPrioridad = 1
                                vReservaBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                vReservaBE.ObsReserva = "Pasajero reservado desde un manifiesto con cierre parcial "
                                vReservaBE.EstadoReserva = "4"
                                vReservaBE.FlgResRetorno = 0
                                vReservaBE.FlgNew = 0
                                vReservaBE.FlgResPasajero = 0
                                vReservaBE.CodComunidad = ""
                                vReservaBE.MotivoViaje = "999"
                                vReservaBE.NomContacto = ""
                                vReservaBE.CodLugarReserva = dsDetalle.Rows(I).Item("CodLugarOrigen")
                                vReservaBE.CodCentroCosto2 = ""
                                If vReservaADO.CrearReserva(vReservaBE) Then
                                    'vReservaADO.TraerReserva
                                    nCR = vReservaADO.RecuperarReservaPorDNI(dsDetalle.Rows(I).Item("NroDocumentoId"), Format(dsDetalle.Rows(I).Item("FchViaje"), "dd/MM/yyyy"))
                                    DManifiestoBE.CodReserva = nCR
                                    DManifiestoBE.NroDocumentoId = dsDetalle.Rows(I).Item("NroDocumentoId")
                                    DManifiestoBE.CodViaje = dsDetalle.Rows(I).Item("CodViaje")
                                    DManifiestoBE.FlgResponsable = False
                                    DManifiestoBE.NomPasajero = dsDetalle.Rows(I).Item("NomPasajero")
                                    DManifiestoBE.NacionalidadPasajero = "Peruana"
                                    DManifiestoBE.ApmPasajero = dsDetalle.Rows(I).Item("ApmPasajero")
                                    DManifiestoBE.ObsManifiesto = dsDetalle.Rows(I).Item("ObsManifiesto")
                                    DManifiestoBE.AppPasajero = dsDetalle.Rows(I).Item("AppPasajero")
                                    DManifiestoBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                    DManifiestoBE.CodCentroCosto = dsDetalle.Rows(I).Item("CodCentroCosto")
                                    DManifiestoBE.CodCentroCosto2 = ""
                                    DManifiestoBE.PctCentroCosto = 100
                                    DManifiestoBE.FlgLock = True
                                    Dim sInstD_Manifiesto As String
                                    sInstD_Manifiesto = "Insert Into dbo.D_Manifiesto (CodViaje,CodReserva,NroDocumentoId,FlgResponsable,NacionalidadPasajero,NomPasajero,AppPasajero,ApmPasajero,ObsManifiesto,CodAnalisis,CodCentroCosto,PctCentroCosto,FlgLock,TipPorExcepcion,FlgChecking) " & _
                                                        " Values (@CodViaje,@CodReserva,@NroDocumentoId,@FlgResponsable,@NacionalidadPasajero,@NomPasajero,@AppPasajero,@ApmPasajero,@ObsManifiesto,@CodAnalisis,@CodCentroCosto,@PctCentroCosto,@FlgLock,@TipPorExcepcion,@FlgChecking)"
                                    cmdDMa = New SqlCommand(sInstD_Manifiesto, cn)
                                    cmdDMa.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                                    cmdDMa.Parameters.AddWithValue("@CodReserva", nCR)
                                    cmdDMa.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                                    cmdDMa.Parameters.AddWithValue("@FlgResponsable", False)
                                    cmdDMa.Parameters.AddWithValue("@NacionalidadPasajero", "Peruana")
                                    cmdDMa.Parameters.AddWithValue("@NomPasajero", dsDetalle.Rows(I).Item("NomPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@AppPasajero", dsDetalle.Rows(I).Item("AppPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@ApmPasajero", dsDetalle.Rows(I).Item("ApmPasajero"))
                                    cmdDMa.Parameters.AddWithValue("@ObsManifiesto", dsDetalle.Rows(I).Item("ObsManifiesto"))
                                    cmdDMa.Parameters.AddWithValue("@CodAnalisis", dsDetalle.Rows(I).Item("CodAnalisis"))
                                    cmdDMa.Parameters.AddWithValue("@CodCentroCosto", dsDetalle.Rows(I).Item("CodCentroCosto"))
                                    cmdDMa.Parameters.AddWithValue("@PctCentroCosto", 100)
                                    cmdDMa.Parameters.AddWithValue("@FlgLock", True)
                                    cmdDMa.Parameters.AddWithValue("@FlgChecking", dsDetalle.Rows(I).Item("FlgChecking"))
                                    cmdDMa.Parameters.AddWithValue("@TipPorExcepcion", dsDetalle.Rows(I).Item("TipPorExcepcion").ToString)
                                    cmdDMa.Transaction = oTran
                                    cmdDMa.ExecuteNonQuery()
                                End If
                            End If
                        End If
                        Dim lRetorno As Boolean = False
                        Dim dFchRetorno As Date
                        ' verifico si se desea generar reserva de retorno
                        If Not IsDBNull(dsDetalle.Rows(I).Item("FlgResRetorno")) And Not IsDBNull(dsDetalle.Rows(I).Item("FchRetorno")) Then
                            lRetorno = dsDetalle.Rows(I).Item("FlgResRetorno")
                            If lRetorno = True Then
                                dFchRetorno = dsDetalle.Rows(I).Item("FchRetorno")
                                mPasajeroBE.AppPasajero = dsDetalle.Rows(I).Item("AppPasajero")
                                mPasajeroBE.ApmPasajero = dsDetalle.Rows(I).Item("ApmPasajero")
                                mPasajeroBE.NomPasajero = dsDetalle.Rows(I).Item("NomPasajero")
                                mPasajeroBE.NroDocumentoId = dsDetalle.Rows(I).Item("NroDocumentoId")
                                mPasajeroBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                mPasajeroBE.NacionalidadPasajero = dsDetalle.Rows(I).Item("NacionalidadPasajero")
                                mPasajeroBE.TlfPasajero = dsDetalle.Rows(I).Item("TlfPasajero")
                                mPasajeroBE.RpcPasajero = dsDetalle.Rows(I).Item("RpcPasajero")
                                mPasajeroBE.MailPasajero = dsDetalle.Rows(I).Item("MailPasajero")
                                mPasajeroBE.CodLugarResidencia = dsDetalle.Rows(I).Item("CodLugarResidencia")
                                nCodPasajero = mPasajeroADO.TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                                If nCodPasajero = 0 Then
                                    mPasajeroADO.CrearPasajero(mPasajeroBE)
                                    nCodPasajero = mPasajeroADO.TraerCodigo(dsDetalle.Rows(I).Item("NroDocumentoId"))
                                End If
                                vReservaBE.FchReserva = dsDetalle.Rows(I).Item("FchRetorno")
                                vReservaBE.TipPasajero = dsDetalle.Rows(I).Item("TipPasajero")
                                vReservaBE.CodPasajero = nCodPasajero
                                vReservaBE.CodCentroCosto = dsDetalle.Rows(I).Item("CodCentroCosto")
                                vReservaBE.PctCentroCosto = 100
                                vReservaBE.PsoPasajero = 0
                                vReservaBE.PsoEquipajePasajero = 0
                                vReservaBE.FchViaje = dsDetalle.Rows(I).Item("FchRetorno")
                                vReservaBE.FchRetorno = dsDetalle.Rows(I).Item("FchRetorno")
                                vReservaBE.MotivoViaje = "Pasajero abordo en el Aeropuerto"
                                vReservaBE.FlgRequisitos = 0
                                vReservaBE.FlgPermiso = 0
                                vReservaBE.NroBoleta = ""
                                vReservaBE.NroPrioridad = 1
                                vReservaBE.CodAnalisis = dsDetalle.Rows(I).Item("CodAnalisis")
                                vReservaBE.ObsReserva = "Rerserva automática de retorno"
                                vReservaBE.EstadoReserva = "2"
                                vReservaBE.FlgResRetorno = 0
                                vReservaBE.FlgNew = 0
                                vReservaBE.FlgResPasajero = 0
                                vReservaBE.CodComunidad = ""
                                vReservaBE.MotivoViaje = "999"
                                vReservaBE.NomContacto = ""
                                vReservaBE.CodLugarReserva = dsDetalle.Rows(I).Item("CodLugarOrigen")
                                vReservaBE.CodCentroCosto2 = ""
                                vReservaADO.CrearReserva(vReservaBE)
                            End If
                        End If
                        Dim sUpdMovPer As String = "UPDATE dbo.Movimiento_Personal SET EstMovimiento = 'I' WHERE NroDocumentoId = @NroDocumentoId  AND EstMovimiento='A'"
                        cmdUPMovPer = New SqlCommand(sUpdMovPer, cn)
                        cmdUPMovPer.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                        cmdUPMovPer.Transaction = oTran
                        cmdUPMovPer.ExecuteNonQuery()
                        sInstDetalle = "Insert Into dbo.Movimiento_Personal (CodViaje,CodReserva,NroDocumentoId,FchViaje,EstMovimiento)" & _
                                       " Values (@CodViaje,@CodReserva,@NroDocumentoId,@FchViaje,@EstMovimiento) "
                        cmdDet = New SqlCommand(sInstDetalle, cn)
                        cmdDet.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                        cmdDet.Parameters.AddWithValue("@CodReserva", IIf(dsDetalle.Rows(I).Item("TipPorExcepcion").ToString = "1", nCR, dsDetalle.Rows(I).Item("CodReserva")))
                        cmdDet.Parameters.AddWithValue("@NroDocumentoId", dsDetalle.Rows(I).Item("NroDocumentoId"))
                        cmdDet.Parameters.AddWithValue("@FchViaje", dsDetalle.Rows(I).Item("FchViaje"))
                        cmdDet.Parameters.AddWithValue("@EstMovimiento", "A")
                        cmdDet.Transaction = oTran
                        cmdDet.ExecuteNonQuery()
                        sUpdDManifiesto = "Update dbo.D_Manifiesto SET FlgChecking = @FlgChecking , TipPorExcepcion = @TipPorExcepcion , ObsManifiesto = @ObsManifiesto WHERE CodViaje = @CodViaje AND CodReserva = @CodReserva "
                        cmdUManifiesto = New SqlCommand(sUpdDManifiesto, cn)
                        cmdUManifiesto.Parameters.AddWithValue("@CodViaje", dsDetalle.Rows(I).Item("CodViaje"))
                        cmdUManifiesto.Parameters.AddWithValue("@CodReserva", dsDetalle.Rows(I).Item("CodReserva"))
                        cmdUManifiesto.Parameters.AddWithValue("@FlgChecking", dsDetalle.Rows(I).Item("FlgChecking"))
                        cmdUManifiesto.Parameters.AddWithValue("@TipPorExcepcion", dsDetalle.Rows(I).Item("TipPorExcepcion").ToString)
                        cmdUManifiesto.Parameters.AddWithValue("@ObsManifiesto", dsDetalle.Rows(I).Item("ObsManifiesto"))
                        cmdUManifiesto.Transaction = oTran
                        cmdUManifiesto.ExecuteNonQuery()
                        sUpdReserva = "Update dbo.V_Reserva SET EstadoReserva = '4' WHERE CodReserva = @CodReserva"
                        If lRetorno = True Then
                            sUpdReserva = "Update dbo.V_Reserva SET FlgResRetorno = @FlgResRetorno, FchRetorno = @FchRetorno, EstadoReserva = '4' WHERE CodReserva = @CodReserva"
                        End If
                        cmdUReserva = New SqlCommand(sUpdReserva, cn)
                        cmdUReserva.Parameters.AddWithValue("@CodReserva", dsDetalle.Rows(I).Item("CodReserva"))
                        If lRetorno = True Then
                            cmdUReserva.Parameters.AddWithValue("@FlgResRetorno", lRetorno)
                            cmdUReserva.Parameters.AddWithValue("@FchRetorno", dFchRetorno)
                        End If
                        cmdUReserva.Transaction = oTran
                        cmdUReserva.ExecuteNonQuery()
                    Next
                    oTran.Commit()
                    Return True
                End Using
            End Using
        Catch myException As Exception
            MsgBox("Movimiento_PersonalADO (fn_GrabarCheckInPasajeros) --> " & myException.Message, MsgBoxStyle.Critical)
            Return False
        End Try
    End Function
End Class